package com.weijian.dal.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.weijian.dal.enums.CourseLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.math.BigDecimal;

/**
 * 购物车商品实体类
 * 
 * 说明：购物车数据采用MySQL持久化 + Redis缓存的混合存储策略
 * - MySQL：用于数据持久化，防止Redis故障导致数据丢失
 * - Redis：用于快速读写，提升用户体验
 * - 购物车TTL：7天无操作自动过期
 * 
 * @author weijian
 */
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@TableName("cart_item")
@NoArgsConstructor
@AllArgsConstructor
public class CartItem extends BaseDO {

    private static final long serialVersionUID = 1L;

    /**
     * 购物车记录ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 课程ID
     */
    private Long courseId;

    /**
     * 课程标题（冗余存储，避免关联查询）
     */
    private String courseTitle;

    /**
     * 课程封面（冗余存储，用于前端展示）
     */
    private String courseCover;

    /**
     * 课程价格（加入购物车时的价格快照）
     */
    private BigDecimal coursePrice;

    /**
     * 购买数量
     * 默认为1，支持批量购买
     */
    private Integer quantity;

    /**
     * 是否选中（用于结算时选择商品）
     */
    private Boolean selected;

    /**
     * 课程难度等级（冗余存储，用于展示）
     */
    private CourseLevel courseLevel;

    /**
     * 课程时长（分钟，冗余存储）
     */
    private Integer courseDuration;
}